import battlegui.Position;
import battlegui.Orientation;
import battlegui.Part;
import battlegui.Gui;
import battlegui.PlayerID;
import java.util.ArrayList;

/**
 * Deze klasse geeft extra mogelijkheden die het bepalen of het plaatsen van de hutten legaal is
 * vermakkelijken.
 * 
 * @author (your name) 
 * @version 1.0
 */
public class Plaatsing
{
    private int maxNumber;
    private int height;
    private int width;

    /**
     * Constructor for objects of class Plaatsing
     */
    public Plaatsing(int height, int width)
    {
        this.height = height;
        this.width = width;
        maxNumber = determineMax();
    }

    /**
     * Gaat na of de hut op deze plaats gebouwd mag worden. Dus of de hut niet zal botsen met 
     * andere hutten of de grens van het land.
     * 
     * @param orientation  de orientatie van de hut
     * @param position     de positie waarop de hut gebouwd moet worden
     * @param length       de lengte van de hut die gebouwd moet worden
     * @param player       de speler die de hut wil bouwen
     * @return    true als de hut gebouwd kan worden / false als het niet mogelijk is om de hut hier
     *  te plaatsen.
     */
    public boolean isLegit(Orientation orientation, Position position, int length, Speler player)
    {
        boolean legit = true;
        
        if (orientation == Orientation.VERTICAL)
        {
            if (position.getY() == height - 1 || position.getY() - (length-1) <= 0)
            {
                legit = false;
            }
            if (position.getX() == 0 || position.getX() == width -1)
            {
                legit = false;
            }
        }
        if (orientation == Orientation.HORIZONTAL)
        {
            if (position.getY() == height- 1 || position.getY() ==0)
            {
                legit = false;
            }
            if (position.getX() == 0 || position.getX() + length >= width)
            {
                legit = false;
            }
        }
       
        if (legit)
        {
            Hut newHut = new Hut(length , orientation, position);
            Position[] newPlaces = newHut.getOccupied();

            ArrayList<Hut> hutten = player.getHutten();
            int index = 0;
            while (index < hutten.size() && legit)
            {
                Hut hut = hutten.get(index);
                Position[] places = hut.getOccupied();
                int index1 = 0;
                while (index1 < places.length && legit)
                {
                    int index2 = 0;
                    while (index2 < newPlaces.length && legit)
                    {
                        if (places[index1].equals(newPlaces[index2]))
                        {
                            legit = false;
                        }
                        index2++;
                    }
                    index1++;
                }
                index++;
            }
        }
        return legit;
    }
    
    /**
     * Geeft het aantal bebouwbare vakjes terug.
     * 
     * @return   aantal vakjes waarop delen van de hutten mogen geplaatst worden.
     */
    public int getMax()
    {
        return maxNumber;
    }
    
    /**
     * Bepaalt het aantal vakjes die door de spelers bebouwd mogen worden.
     * 
     * @return    het aantal vakjes waarop gebouwd mag worden.
     */
    private int determineMax()
    {
        int max = (height*width)/4;
        return max;
    }
}
